// import { NestFactory } from '@nestjs/core';
// import { AppModule } from './app.module';
// import { ValidationPipe, VersioningType } from '@nestjs/common';
// import { ErrorFilter } from './utils/error.filter';

// import * as session from 'express-session';

// // 加载环境变量
// import './envConfig/env';
// import {
//   DocumentBuilder,
//   SwaggerCustomOptions,
//   SwaggerModule,
// } from '@nestjs/swagger';
// import { ConfigService } from '@nestjs/config';
// import { NestExpressApplication } from '@nestjs/platform-express';

// async function bootstrap() {
//   const app = await NestFactory.create<NestExpressApplication>(AppModule, {
//     cors: true,
//   });
//   app.setGlobalPrefix('api');
//   // const swaggerConfig = new DocumentBuilder()
//   //   .setTitle('Test--')
//   //   .setDescription('The API description')
//   //   .setVersion('1.0')
//   //   .addTag('test')
//   //   // .setBasePath('api')
//   //   .build();

//   // const customOptions: SwaggerCustomOptions = {
//   //   useGlobalPrefix: true,
//   // };
//   // const document = SwaggerModule.createDocument(app, swaggerConfig);
//   // SwaggerModule.setup('doc', app, document, customOptions);

//   // app.useGlobalPipes(
//   //   new ValidationPipe({
//   //     transform: true,
//   //     whitelist: true,
//   //     transformOptions: {
//   //       enableImplicitConversion: true,
//   //     },
//   //   }),
//   // );

//   app.use(
//     session({
//       secret: 'xufei',
//       resave: false,
//       saveUninitialized: false,
//     }),
//   );

//   // app.enableVersioning({
//   //   type: VersioningType.HEADER,
//   //   header: 'version',
//   // });

//   // app.useStaticAssets('public', {
//   //   prefix: '/static',
//   // });
//   const configService = app.get(ConfigService);
//   // app.useGlobalFilters(new ErrorFilter());
//   await app.listen(configService.get('nestEnv.port'));
// }
// bootstrap();

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe, VersioningType } from '@nestjs/common';
import { ErrorFilter } from './utils/error.filter';
import { WsGuard } from './utils/guard/WsGuard';
import * as session from 'express-session';
// 加载环境变量
import './envConfig/env';
import {
  DocumentBuilder,
  SwaggerCustomOptions,
  SwaggerModule,
} from '@nestjs/swagger';
import { ConfigService } from '@nestjs/config';
import { NestExpressApplication } from '@nestjs/platform-express';

async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(AppModule, {
    cors: true,
  });
  app.setGlobalPrefix('api');
  const swaggerConfig = new DocumentBuilder()
    .setTitle('Test--')
    .setDescription('The API description')
    .setVersion('1.0')
    .addTag('test')
    // .setBasePath('api')
    .build();

  const customOptions: SwaggerCustomOptions = {
    useGlobalPrefix: true,
  };
  const document = SwaggerModule.createDocument(app, swaggerConfig);
  SwaggerModule.setup('doc', app, document, customOptions);

  app.useGlobalPipes(
    new ValidationPipe({
      transform: true,
      transformOptions: {
        enableImplicitConversion: true,
      },
    }),
  );

  app.use(
    session({
      secret: 'xufei',
      resave: false,
      saveUninitialized: false,
    }),
  );

  app.enableVersioning({
    type: VersioningType.HEADER,
    header: 'version',
  });

  app.useStaticAssets('public', {
    prefix: '/static',
  });
  const configService = app.get(ConfigService);
  app.useGlobalFilters(new ErrorFilter());
  await app.listen(configService.get('nestEnv.port'));
}
bootstrap();
